🎯 系列目標:用 30 天時間,從零開始打造一個專屬輔大學生的課表生成 Chrome 擴充功能
👨💻 作者:輔大智慧資安 412580084
📅 Day 7:Chrome Extension 實作篇 - background.js 背景腳本實作
昨天我們深入理解了 background.js 的理論基礎,今天我們要動手實作!我們將建立一個最簡單但功能正確的背景腳本,為我們的輔大課表生成器奠定基礎。
今天我們要完成:
讓我們從最基本的版本開始:
// background.js - 輔大課表生成器背景腳本
console.log('🚀 輔大課表生成器背景腳本已載入');
// 擴充功能安裝時執行
chrome.runtime.onInstalled.addListener((details) => {
console.log('📦 擴充功能安裝事件:', details.reason);
if (details.reason === 'install') {
console.log('✨ 歡迎使用輔大課表生成器!');
} else if (details.reason === 'update') {
console.log('🔄 擴充功能已更新');
}
});
// Service Worker 啟動時執行
chrome.runtime.onStartup.addListener(() => {
console.log('🚀 Service Worker 啟動');
});
讓我們了解一下上面代碼中使用的 Chrome API:
chrome.runtime.onInstalled:
// 語法格式
chrome.runtime.onInstalled.addListener((details) => {
// details.reason 可能的值:
// 'install' - 首次安裝
// 'update' - 更新版本
// 'chrome_update' - Chrome 瀏覽器更新
// 'shared_module_update' - 共享模組更新
});
chrome.runtime.onStartup:
// 語法格式
chrome.runtime.onStartup.addListener(() => {
// 當 Chrome 啟動時執行
// 注意:只有在 Chrome 啟動時才觸發,重新載入擴充功能不會觸發
});
在 Chrome Extension 中,大部分功能都是透過事件監聽器來實現:
// 基本格式
chrome.[API名稱].[事件名稱].addListener((參數) => {
// 當事件發生時執行的代碼
});
常見的事件監聽器:
chrome.runtime.onInstalled
- 擴充功能安裝/更新時chrome.runtime.onStartup
- Chrome 啟動時chrome.action.onClicked
- 擴充功能圖示被點擊時(明天會學到)chrome.tabs.onUpdated
- 分頁更新時(之後會學到)chrome 物件:
異步處理:
addListener
來監聽事件權限要求:
chrome.runtime
是基礎 API,通常不需要額外權限chrome.storage
)需要在 manifest.json 中宣告確保 manifest.json
有正確引用 background.js:
{
"manifest_version": 3,
"name": "輔大課表生成器",
"version": "1.1.0",
"description": "輔大課表生成器,一鍵產生當學期課表",
"permissions": [
"activeTab",
"scripting",
"storage",
"downloads"
],
"host_permissions": [
"https://portal.fju.edu.tw/*",
"http://estu.fju.edu.tw/*"
],
"background": {
"service_worker": "background.js"
}
}
重新載入擴充功能:
chrome://extensions/
檢查背景腳本:
點擊「檢查檢視畫面:service worker」
查看 Console 輸出
預期輸出:
完成後,目前專案結構應該是:
📁 fju-schedule-extension/
├── 📄 manifest.json ← 包含 background 設定
└── 📄 background.js ← 新建立的背景腳本
🔗 知識銜接:今天我們建立了最基本的背景腳本架構,明天將加入事件處理機制,讓擴充功能能夠響應用戶操作和瀏覽器事件。
🎯 下集預告:Day 8 - Chrome Extension 理論篇 - 消息傳遞機制與 Popup 介面